package systemInputOutput;

import java.util.LinkedList;
import geometricElement.GeometricElement;
import robot.Robot;

public interface IOinterface {
	
	/**
	 * Asks the user to insert dimensions for the ground, and returns them
	 * @return Int array of size 2, first entry is height, second entry is width
	 */
	public abstract int[] getGroundSize();
	
	/**
	 * Asks the user for wanted option and returns it
	 * @return Option given by user
	 */
	public abstract int getOption();
	
	/**
	 * Asks the user for robot's basket capacity
	 * @return Robot's basket capacity 
	 */
	public abstract double getRobotBasket();

	/**
	 * Asks the user for geometric element's property
	 * @return Geometric element's property
	 */
	public abstract double getElementProperty();
	
	/**
	 * Asks the user for wanted position (x and y coordinates) for the new object.
	 * Returns an array of 2 ints- the first entry is x-axis coordinate and the second is y-axis coordinate 
	 * @return Int array of size 2, holding the position
	 */
	public abstract int[] getObjectPosition();
	
	/**
	 * Asks the user for wanted type for the new object and returns it as a String
	 * @return Type of the new geometric element
	 */
	public abstract String getElementType();
	
	/**
	 * Asks the user whether to continue adding objects of given type
	 * @param type- the type of object to create
	 * @return User's choice, as numeric value
	 */
	public abstract int askIfContinueAdding(String type);
	
	/**
	 * Asks the user whether to start adding geometric elements
	 * @return User's choice, as numeric value
	 */
	public abstract int askToAddGeoElements();
	
	/**
	 * Prints error given message to the user
	 * @param msg- Error message to be printed
	 */
	public abstract void notifyErrorMsg(String msg);

	/**
	 * Gets the list of geometric elements that were not picked, and prints it 
	 * @param listToPrint- list of geometric elements that were not picked
	 */
	public abstract void printNonPickedGeoElements(LinkedList<GeometricElement> listToPrint);
	
	/**
	 * Gets the list of robots and prints the robots' statistics
	 * @param listToPrint- list of robots
	 */
	public abstract void printRobotsStats(LinkedList<Robot> listToPrint);
}
